home *** CD-ROM | disk | FTP | other *** search
- // file : rad1.pop
- // the branching algorithm used here is described in Todd & Latham p.151, fig 8.14
- // variable names given in brackets corespomd to the names used in Todd & Latham
-
-
- population 0
- dimensions = 1
- colour_model RGB
- render_quality flat
-
-
-
- genome 0 {
-
- ///////////////////////
- // initialise turtle //
- ///////////////////////
-
- noseUp( 1.570770 ),
- setColour( hsv<.5,.5,.75> : hsv<0,.2,.5> : hsv<.99999,.99999,.99999> ),
- eggScale( 0.75 : 0.2 : 1 ),
-
- //////////////////////////
- // initialise constants //
- //////////////////////////
-
- // generate random constants
- setScalarMem( 5, 2 : 2 : 40 ), // mem[5] = #ribs
- setScalarMem( 6, 360 : 1 : 360 ), // mem[6] = angular coverage (= s)
- setScalarMem( 7, 1 : 1 : 1 ), // mem[7] = diffusion (= p)
-
- // derive surface-coverage from angular coverage, mem[8] = surface-coverage (surfprop)
- setScalarMem( 8,
- mul( 0.5,
- sub( 1,
- cos(
- dtor(
- mul( 0.5, getScalarMem(6) )
- )
- )
- )
- )
- ),
-
- // derive number of branches (ncon), mem[9] = #ribs / surface-coverage
- setScalarMem( 9, div( getScalarMem(5), getScalarMem(8) ) ),
-
-
- /////////////////////////
- // main branching loop //
- /////////////////////////
-
- // for mem[0] = 0 to #ribs - 1
- for( getScalarMem(5), 0,
- join(
- // mem[1] = alpha (m)
- setScalarMem( 1,
- // NOTE : may need to add 1 to mem[0] before divide!
- div( getScalarMem(0), getScalarMem(5) )
- ),
-
- // mem[2] = (y) = 1 - 2 * alpha * surface-coverage
- setScalarMem( 2,
- sub( 1,
- mul( 2, mul(getScalarMem(1),getScalarMem(9)) )
- )
- ),
-
- // mem[3] = (phi) = acosd(y)
- setScalarMem( 3,
- rtod( acos( getScalarMem(2) ) )
- ),
-
- // rotate into position
- noseDown( getScalarMem(3) ),
- swivelLeft(
- dtor(
- mul( 137.5,
- mul( getScalarMem(7),
- mul( getScalarMem(1), getScalarMem(5) )
- )
- )
- )
- ),
-
- ///////////////////
- // make a branch //
- ///////////////////
-
- scope(
- // make the reflected helix structure
- *reflect(
- <-1,1,1>,
- repeat(
- 1 : 1 : 60, // #segments
- join(
- // 'lay' a single segment
- scope(
- noseDown( dtor(90 : 45 : 135) ),
- // lay the cross-bar
- *scope(
- setTexture( norder false:toggle ),
- setBitmap( norder 0 : 0 : 20 ),
- setWrap( norder 0 : 0 : 2 ),
- eggVectorScale( <1,1,4> : <1,1,1> : <1,1,8> ),
- egg( norder 0 : 0 : 20 ),
- moveHue( -0.2 : -0.3 : 0.3 ),
- lay
- ),
- // lay the end-marker
- forward( 1 : -2 : 2 ),
- egg( norder 0 : 0 : 20 ),
- setTexture( norder false:toggle ),
- setBitmap( norder 0 : 0 : 20 ),
- setWrap( norder 0 : 0 : 2 ),
- scope(
- rotate( <0,0,0> : <-2,-2,-2> : <2,2,2> ),
- forward( 0 : -2 : 2 ),
- lay
- )
- ),
- // inter-segment code
- *forward( .5 : -1 : 1 ),
- scale( .95 : .9 : 1.1 ),
- bankLeft( dtor(10 : -25 : 25) ),
- moveHue( 0.01 : -0.05 : 0.05 ),
- moveSat( 0 : -0.05 : 0.05 )
- )
- )
- )
- )
- ) // end main branch code-block
- ) // end main for loop
- }
-
-
- // eof : rad1.pop
-
-